#include "const.h"

const char *v_get(var_t v) {
	if (!v)
		return "";

	if (v->flags&VAR_SYMLINK_BIT) {
		if (v->array.ptrvar == v->value.symlink)
			return v_get_array(v->array.ptrvar, v->array.ptrvar->array.i);

		return v_get(v->value.symlink);
	}

	if (v->flags&VAR_ARRAY_BIT) {
		if (~v->flags&VAR_ARRAYFETCHED_BIT) {
			size_t i, j, n;

			for(i=0,n=0; i<v->array.n; i++)
				n += strlen(v->array.members[i]) + 1; /*space or null*/

			if (!n)
				n = 1;

			if (v->value.text)
				i_delete((void *)v->value.text);

			v->value.text = (char *)i_new(n);

			n = 0;
			for(i=0; i<v->array.n; i++) {
				for(j=0; v->array.members[i][j]; j++)
					v->value.text[n++] = v->array.members[i][j];
				v->value.text[n++] = i+1<v->array.n ? ' ' : 0;
			}

			v->flags |= VAR_ARRAYFETCHED_BIT;

			if (v->expanded) {
				i_delete((void *)v->expanded);
				v->expanded = (char *)0;
			}
		}
	}

	return v->value.text ? v->value.text : "";
}
